/**
 * 主要JavaScript入口文件
 * 整合所有模块化组件，提供全局功能
 */

// 导入模块化组件
import { showNotification } from './modules/notifications.js';
import { initDropdowns } from './modules/dropdowns.js';
import { initModals } from './modules/modals.js';
import { initFormValidation } from './modules/formValidation.js';
import { initTables } from './modules/tables.js';
import { initNavbar } from './modules/navbar.js';
import { 
    initScrollAnimations, 
    addRippleEffect, 
    addRippleStyles,
    showLoadingIndicator,
    hideLoadingIndicator,
    animateElement 
} from './modules/animations.js';

// 全局应用初始化
document.addEventListener('DOMContentLoaded', function() {
    // 初始化核心组件
    initCoreComponents();
    
    // 增强按钮交互效果
    enhanceButtons();
    
    // 添加页面加载动画
    addPageLoadAnimations();
    
    // 为所有链接添加平滑滚动
    addSmoothScroll();
});

/**
 * 初始化所有核心组件
 */
function initCoreComponents() {
    // 初始化导航栏
    initNavbar();
    
    // 初始化下拉菜单
    initDropdowns();
    
    // 初始化模态框
    initModals();
    
    // 初始化表单验证
    initFormValidation();
    
    // 初始化表格
    initTables();
    
    // 初始化滚动动画
    initScrollAnimations();
    
    // 添加波纹效果样式
    addRippleStyles();
}

/**
 * 增强按钮交互效果
 */
function enhanceButtons() {
    const buttons = document.querySelectorAll('.btn');
    
    buttons.forEach(button => {
        // 添加波纹效果
        button.addEventListener('click', function(e) {
            addRippleEffect(this, e);
        });
        
        // 添加悬停效果类
        button.classList.add('btn-hover-effect');
    });
}

/**
 * 添加页面加载动画
 */
function addPageLoadAnimations() {
    // 获取页面所有需要动画的元素
    const animatedElements = document.querySelectorAll(
        '.animate-on-scroll, .feature-card, .card, .stat-card'
    );
    
    // 初始设置动画属性
    animatedElements.forEach(element => {
        if (!element.classList.contains('animate')) {
            element.classList.add('animate');
        }
    });
    
    // 为页面主要部分添加进入动画
    const mainContent = document.querySelector('main');
    if (mainContent) {
        animateElement(mainContent, 'fade-in', 100);
    }
}

/**
 * 添加平滑滚动
 */
function addSmoothScroll() {
    // 为所有内部链接添加平滑滚动
    document.querySelectorAll('a[href^="#"]').forEach(anchor => {
        anchor.addEventListener('click', function(e) {
            const targetId = this.getAttribute('href');
            
            // 仅处理页面内部锚点链接
            if (targetId === '#' || targetId.startsWith('#/')) {
                return;
            }
            
            const targetElement = document.querySelector(targetId);
            if (targetElement) {
                e.preventDefault();
                
                // 平滑滚动到目标位置
                targetElement.scrollIntoView({
                    behavior: 'smooth',
                    block: 'start'
                });
                
                // 如果是移动设备，点击链接后关闭侧边栏
                if (window.innerWidth < 768) {
                    const sidebar = document.querySelector('.sidebar');
                    if (sidebar && sidebar.classList.contains('sidebar-active')) {
                        sidebar.classList.remove('sidebar-active');
                        document.body.classList.remove('sidebar-open');
                        const overlay = document.querySelector('.overlay');
                        if (overlay) overlay.classList.remove('active');
                    }
                }
            }
        });
    });
}

// 为导航栏菜单项添加交互效果
function enhanceNavItems() {
    const navItems = document.querySelectorAll('.nav-item, .sidebar-nav-item');
    
    navItems.forEach(item => {
        // 添加悬停效果
        item.addEventListener('mouseenter', function() {
            this.style.transform = 'translateX(5px)';
        });
        
        item.addEventListener('mouseleave', function() {
            this.style.transform = 'translateX(0)';
        });
    });
}

// 导出全局API
window.App = {
    // 通知API
    notify: showNotification,
    
    // 加载指示器API
    showLoader: showLoadingIndicator,
    hideLoader: hideLoadingIndicator,
    
    // 动画API
    animate: animateElement,
    initScrollAnimations: initScrollAnimations,
    
    // 表单API
    validateForm: function(form) {
        const formValidation = initFormValidation();
        return formValidation.validate(form);
    },
    
    // 导航API
    scrollToTop: function() {
        window.scrollTo({ top: 0, behavior: 'smooth' });
    },
    
    // 工具方法
    debounce: function(func, wait) {
        let timeout;
        return function executedFunction(...args) {
            const later = () => {
                clearTimeout(timeout);
                func(...args);
            };
            clearTimeout(timeout);
            timeout = setTimeout(later, wait);
        };
    },
    
    throttle: function(func, limit) {
        let inThrottle;
        return function(...args) {
            if (!inThrottle) {
                func.apply(this, args);
                inThrottle = true;
                setTimeout(() => inThrottle = false, limit);
            }
        };
    }
};

// 防止双击选择文本的辅助函数
document.addEventListener('dblclick', function(e) {
    if (e.target.closest('.btn') || e.target.closest('.card')) {
        e.preventDefault();
    }
});

// 键盘快捷键支持
document.addEventListener('keydown', function(e) {
    // ESC键关闭模态框或侧边栏
    if (e.key === 'Escape') {
        const openModal = document.querySelector('.modal.active');
        const openSidebar = document.querySelector('.sidebar.sidebar-active');
        
        if (openModal) {
            openModal.classList.remove('active');
            document.body.classList.remove('modal-open');
        }
        
        if (openSidebar) {
            openSidebar.classList.remove('sidebar-active');
            document.body.classList.remove('sidebar-open');
            const overlay = document.querySelector('.overlay');
            if (overlay) overlay.classList.remove('active');
        }
    }
    
    // Ctrl/Cmd + K 聚焦搜索框
    if ((e.ctrlKey || e.metaKey) && e.key === 'k') {
        e.preventDefault();
        const searchInput = document.querySelector('input[type="search"]');
        if (searchInput) {
            searchInput.focus();
        }
    }
});

// 导出公共API
export { showNotification };